package org.zwy.gradetrack.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.zwy.gradetrack.entity.InternshipUnitEvaluation;
import org.zwy.gradetrack.vo.InternshipUnitEvaluationVO;

import java.util.List;
import java.util.Map;

/**
 * 实习单位评价服务接口
 */
public interface InternshipUnitEvaluationService extends IService<InternshipUnitEvaluation> {

    /**
     * 分页查询实习单位评价列表，包含实习单位名称和毕业生名称
     *
     * @param current 当前页
     * @param size 每页大小
     * @param internshipUnitId 实习单位ID（可选）
     * @param studentId 学生ID（可选）
     * @param indicatorId 指标点ID（可选）
     * @return 分页结果，包含实习单位名称和毕业生名称
     */
    Page<InternshipUnitEvaluationVO> pageEvaluationsWithDetails(Integer current, Integer size, Long internshipUnitId, Long studentId, Long indicatorId);

    /**
     * 创建实习单位评价
     *
     * @param evaluation 评价数据
     * @return 创建的评价数据
     */
    InternshipUnitEvaluation createEvaluation(InternshipUnitEvaluation evaluation);

    /**
     * 更新实习单位评价
     *
     * @param id 评价ID
     * @param evaluation 评价数据
     * @return 更新后的评价数据
     */
    InternshipUnitEvaluation updateEvaluation(Long id, InternshipUnitEvaluation evaluation);

    /**
     * 获取评价统计信息
     *
     * @param internshipUnitId 实习单位ID（可选）
     * @param studentId 学生ID（可选）
     * @param indicatorId 指标点ID（可选）
     * @return 统计信息
     */
    Map<String, Object> getStatistics(Long internshipUnitId, Long studentId, Long indicatorId);

    /**
     * 批量导入评价数据
     *
     * @param evaluations 评价数据列表
     */
    void batchImport(List<InternshipUnitEvaluation> evaluations);

    /**
     * 检查评价是否存在
     *
     * @param internshipUnitId 实习单位ID
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 是否存在
     */
    boolean existsEvaluation(Long internshipUnitId, Long studentId, Long indicatorId);

    /**
     * 获取实习单位对学生的所有评价
     *
     * @param internshipUnitId 实习单位ID
     * @param studentId 学生ID
     * @return 评价列表
     */
    List<InternshipUnitEvaluation> getInternshipUnitStudentEvaluations(Long internshipUnitId, Long studentId);

    /**
     * 获取学生对指标点的所有评价
     *
     * @param studentId 学生ID
     * @param indicatorId 指标点ID
     * @return 评价列表
     */
    List<InternshipUnitEvaluation> getStudentIndicatorEvaluations(Long studentId, Long indicatorId);
} 